package br.com.fiap.atividade5.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;

import br.com.fiap.atividade5.entity.Produto;

public class ProdutoDAO extends GenericDAO<Produto> {

	@Override
	protected PreparedStatement doGetByIdyStatement(Long id)
			throws SQLException {
		
		PreparedStatement st = getConnection().prepareStatement("SELECT * FROM PRODUTO WHERE CODIGO = ?");
		st.setLong(1, id);
		
		return st;
	}

	@Override
	protected PreparedStatement doInsertStatement(Produto entity)
			throws SQLException {
		
		return null;
	}

	@Override
	protected PreparedStatement doUpdateStatement(Produto entity)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	protected PreparedStatement doDeleteStatement(Produto entity)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	protected Produto createEntityByResultSet(ResultSet rs) throws SQLException {
		
		Produto produto = new Produto();
		
		produto.setCodigo(rs.getLong("CODIGO"));
		produto.setDescricao(rs.getString("DESCRICAO"));
		produto.setValorUnitario(rs.getBigDecimal("VALOR_UNITARIO"));
		produto.setInPromocao(rs.getBoolean("PROMOCAO"));
		
		return produto;
	}
	
	public final List<Produto> listAll() throws Exception {
		
		List<Produto> produtos = new LinkedList<Produto>();
		
		try {
			
			abreConexao();
			
			PreparedStatement st = getConnection().prepareStatement("SELECT * FROM PRODUTO");
			
			ResultSet result = st.executeQuery();
			
			while (result.next()) {
				Produto entity = this.createEntityByResultSet(result);
				produtos.add(entity);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			fechaConexao();
		}
		
		return produtos;
	}
	
}
